#ifndef QTTEST_MESSAGEQUEUE_H
#define QTTEST_MESSAGEQUEUE_H

#include "./Message.h"
#include <mutex>
#include <deque>
#include <condition_variable>

class MessageQueue {
public:
    void enQueue(Message *msg);

    Message *deQueue();

private:
    std::deque<Message *> mQ;
    /**
     * 单纯使用 std::mutex 困难之处在于，如何确定这个延时时间呢，假如生产者生产的很快，
     * 消费者却延时500ms，也不是很好，如果生产者生产的更慢，那么消费者延时500ms，还是不必要的占用了CPU。
     * ___1. 这就引出了条件变量(condition variable)，
     * ___2. c++11中提供了#include <condition_variable>头文件，
     * ___3. 其中的std::condition_variable可以和std::mutex结合一起使用，
     * ___4. 其中有两个重要的接口，notify_one()和wait()，wait()可以让线程陷入休眠状态。
     */
    std::condition_variable mCond;
    /**
     * 因此，为了性能，我们同时使用 std::condition_variable 和 std::mutex 这样性能更高。
     */
    std::mutex mMutex;
};

#endif //QTTEST_MESSAGEQUEUE_H

